home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
progjour
/
1991
/
03
/
findfile.bas
< prev
next >
Wrap
BASIC Source File
|
1990-08-17
|
4KB
|
71 lines
'***********************************************************************
' FINDFILE.BAS *
' Two functions to be linked to programs compiled with BC version 7 *
'----------------------------------------------------------------------*
' MAKNAME(<filespec>) [DECLARE FUNCTION MAKNAME$ (A$)] returns the *
' <filename.ext> portion of <filespec>, where <filespec> can be either *
' a string variable or string literal. *
'----------------------------------------------------------------------*
' FINDFILE(<filespec>) [DECLARE FUNCTION FINDFILE$ (A$)] locates a *
' file stored in the specified directory or in a directory on the PATH *
' environment string, using the "new" BASIC function DIR$ to test for *
' existence of a file. FINDFILE returns a string containing the full *
' <filespec> (including the drive and directory path as required). If *
' the input argument contains "wildcards," FINDFILE will return the *
' expanded <filespec> of the first file found that meets the input *
' specification. If the requested file cannot be found after the *
' PATH environment string search, FINDFILE returns a null string. *
'----------------------------------------------------------------------*
' Rewritten by M. L. Lesser, April 8, 1990 *
' Based on the BC version 4.0 subroutines in the module of the same *
' name, written for the book "Advanced QuickBASIC 4.0," published by *
' Bantam Books, 1988. *
' Compiled with Microsoft BC version 7.1 *
'***********************************************************************
DEFINT I-K
DEFSTR F,M,P,T
FUNCTION MAKNAME(FILENAME) STATIC
LET J = INSTR(FILENAME,"\") 'Separator in <filespec> "path"
LET K = 0 'Place mark
WHILE J <> 0
LET K = J 'K will be location of
LET J = INSTR(K+1,FILENAME,"\") ' last "\" in FILENAME
WEND
IF K = 0 THEN LET K = INSTR(FILENAME,":") 'If no path, try drive
IF K <> 0 THEN
LET MAKNAME = MID$(FILENAME,K+1)
ELSE
LET MAKNAME = FILENAME
END IF
END FUNCTION
FUNCTION FINDFILE(FILE) STATIC
LET PATH = ENVIRON$("PATH") 'Get PATH environment string
' Capture any FPATH from input FILE in case hit on first directory:
LET FPATH = UCASE$(LEFT$(FILE,INSTR(FILE,MAKNAME(FILE))-1))
LET TEMP = FILE 'Local variable
' Now find the file:
WHILE LEN(DIR$(TEMP)) = 0 'As long as file not found
LET I = INSTR(PATH,";") 'Separator in PATH string
IF PATH = "" THEN 'If no more directories
LET FINDFILE = "" 'Error signal and forced
EXIT FUNCTION ' return from function
END IF
IF I <> 0 THEN 'If more than one "path"
LET FPATH = LEFT$(PATH,I-1) 'Try next one and
LET PATH = MID$(PATH,I+1) ' strip it off string
ELSE 'This is last one on string
LET FPATH = PATH 'So use it
LET PATH = "" ' and set PATH at null
END IF
IF RIGHT$(FPATH,1) <> "\" THEN 'If not a root directory
LET FPATH = FPATH + "\" ' add trailing "\"
END IF
LET TEMP = MAKNAME(TEMP) 'Delete old "path,"
LET TEMP = FPATH + TEMP ' insert new value,
WEND ' and try again
LET FINDFILE = FPATH + DIR$(TEMP)
END FUNCTION